PowerLisp 2.0 5/26/96 New Features in PowerLisp 2.0 CLOS Support The biggest new feature in PowerLisp 2.0 is the addition of CLOS support. See the section on CLOS for details. Preferences A Preferences dialog has been added. It lets you control how much time is given to background processes while Lisp programs are running. It also lets you choose between having output all go to the Worksheet vs. output will go to the window that last executed a Lisp command. Registration Screen (Sorry, but a necessary addition). A registration screen has been added at startup. If you have registered, you can disable it by entering your name and product registration code in the Registration dialog. Contact Roger Corman to receive your code if you have already registered. Better Structure and Array Handling In PowerLisp 2.0, structures, arrays and strings are all stored more efficiently. Arrays and strings are more consistent and more closely adhere to the Common Lisp standard. Top level variables The Common Lisp variables +, ++, *, **, etc. are now properly bound during top loop execution as specified in the Common Lisp standard. Misc. Additional Language Features A number of other Common Lisp functions which were missing are now implemented (I am sorry to not be more specific here). Overall, PowerLisp 2.0 is much closer to the CLTL2 specification than any previous version of PowerLisp. More Stable on Power Macs. A serious bug which prevented PPC compiled code from working on certain Power Macs (related to the memory setup) has now been fixed. This generally caused a crash during startup on affected machines. The fix was released last summer as PowerLisp 1.2.1d. These changes are now included in PowerLisp 2.0. PowerLisp 1.2 4/1/95 --------------- This is the public release of PowerLisp 1.2. It contains a significant number of new features, bug fixes, and enhancements over version 1.1. I will go over a number of these here, but probably won't cover all of them. I greatly appreciate the support of those of you who have chosen to register PowerLisp, and who have communicated with me regarding bugs, requested enhancements, etc. Many of the added features are in direct response to those communications. PowerMac Native The single biggest change is that PowerLisp is now a fat binary, and runs native on a PowerMac as well as a 68k Mac. The speed of the interpreter on a PowerMac is up to 10 times as fast as when running emulated. In addition, a full suite of tools, including PowerPC native code compiler, assembler and disassembler are included with PowerLisp. PowerLisp is released with both 68k and PPC binaries of the library files. Documentation Thanks to Digital Press and Guy L. Steele Jr., Common Lisp the Language, 2nd edition is available for electronic distribution. I have packaged it in a form that can be browsed in PowerLisp, and will be including it with the PowerLisp package for distribution. Note that Digital Press owns the copyright to this work. Please read the readme.txt file in the Documentation folder for information about Digital Press and this reference book. Additionally, I have put an ascii version of the PowerLisp documentation in browsable format from within PowerLisp. A hierarchical Documentation menu makes it very convenient to get documentation on any Common Lisp function. Also, the Common Lisp documentation function can be used to pull up the documentation from CLTL2 as well. To Install the Common Lisp the Language documentation files so that they can be used from PowerLisp: Unstuff the PowerLisp-CLTL2.sit archive. The expanded folder, Documentation, should be placed into the PowerLisp 1.2 folder. It will replace the current Documentation folder. To test whether the installation was successful: Start up PowerLisp 1.2. It will take longer to start up, because the menu structure is being built and the documentation index is being read. When it finishes, pull down the Documentation menu. It should be extended with Common Lisp the Language chapter names. If not, then the documentation is not correctly installed. If at some point you decide you don't want the expanded documentation, you can disable the load at startup simply by renaming the file in the Documentation folder called cltl2-index.lisp to some other name. If this file is not found at startup, the extra documentation is not loaded. Editor The editor now places temporary files in the Macintosh temporary items folder, which is where they belong. This should avoid leaving files around when errors occur or when the program terminates abnormally. The PowerLisp Worksheet defaults to Lisp Mode. PostScript and C++ Mode have been removed, as they were not really useful. Editor Known Bugs Line Wrap mode and Lisp mode are not totally compatible. I avoid using them at the same time. I haven't gotten around to fixing this yet. When in Lisp Mode, dragging and scrolling a selection sometimes leaves garbage highighting on the screen. This is cosmetic only. Common Lisp Implementation A number of new functions have been added. Also, printing functions are more correctly implemented. Complex numbers are working better than in 1.1. A number of library functions will still not handle complex numbers, and will give an error message when passed one. Floating point comparisons are fixed now. The main item which is still lacking, relative to CLTL2, is CLOS. Here and there you may still stumble on some missing functions, but hopefully this won't come up often. Integers are now passed as tagged direct values (if they fit in 31 bits). This improves speed of integer manipulation quite a bit. I will probably continue to migrate other types to the tagging scheme. This reduces memory usage and garbage collection. Compiler 68k compiled libraries use the extension .fasl, and PowerPC compiled libraries use the extension .ppcl. They both have the same file type currently. If you try to load and execute the wrong file, it will not be detected and your system will crash! Sorry about this, but I didn't have time to deal with this. For now, your best bet may be to remove all libraries which are the wrong type from your library folder i.e. if you have a PowerMac remove all the .fasl, and if not remove all the .ppcl. I recommend that you recompile any of your own libraries with version 1.2. PowerLisp 1.1 4/4/94 --------------- This is the public release of PowerLisp 1.1. It contains a significant number of new features, bug fixes, and enhancements over version 1.01. I will go over a number of these here, but probably won't cover all of them. I greatly appreciate the support of those of you who have chosen to register PowerLisp, and who have communicated with me regarding bugs, requested enhancements, etc. Many of the added features are in direct response to those communications. Thanks to Ken Long for his improved color icons, which I have included in this released version. Editor The editor, PowerEdit, has been enhanced in a number of ways, and a number of bugs have been fixed. The editor now uses its own heap, which is limited in size to 200k. A source file of about 80k is likely to fill it up. When the editor limit is reached, text is written to disk in a temporary file. As a result, you may edit many, large files without any effect on the space you have for your Lisp programs. I find the occasional slowdown from disk activity is preferable to the way the editor ate up memory in 1.01. Currently a temporary file for each open file is created, when the editor needs memory. These files should be deleted when the program exits. The editor has been cleaned up internally, which seems to have eliminated some spurious crashes and data loss. I still am not 100% confident in it, so keep good backups of your source files. Line Wrap mode works pretty well now. You can easily turn it on, but you can't make it the default yet. For large files it can get pretty sluggish. I usually turn it on when I need to view a long line, and leave it off the rest of the time. Lisp mode has been improved. As several of you noted, it seems logical that when a Lisp expression is outlined, pressing Enter should execute the entire expression, rather than just the current line. I have implemented this. To make it obvious, the whole expression gets highlighted for a fraction of a second before executing it. You may now create bold and italic text in the editor. The commands are located in the bottom of the Edit menu. Lisp mode no longer automatically italicizes comments. Bold and italicized text gets saved and re-loaded correctly. Another problem several people had was getting buried in open parentheses. When you are entering expressions, and have not closed enough levels of parentheses, the system seems frozen. To make it clearer, the editor now shows the number of open parentheses in the message bar. I think this helps. Editor Known Bugs Line Wrap mode and Lisp mode are not totally compatible. I avoid using them at the same time. PowerLisp Environment A major addition is the Memory window, which can be displayed via the Memory command in the new Misc menu. It brings up a window which gives you animated displays of the PowerLisp heaps, stacks and editor heap usage. It is useful for monitoring memory usage while you are running, and noticing how much time is spent in garbage collection. When you see the Nodes and Heap bars shrinking you know garbage is being recycled. Common Lisp Implementation PowerLisp 1.1 is much closer to CLTL2 compatibility than was 1.01. A larg number of functions and macros have been added, and several which were incorrectly implemented have been fixed. Several more libraries have been added, as many of the new, corrected implementations are in Common Lisp and replace built-in C++ functions. Complex numbers and arbitrarily large integers are now supported in PowerLisp. The main item which is still lacking, relative to CLTL2, is CLOS. Here and there you may still stumble on some missing functions, but hopefully this won't come up often. Scope and Extent The important fix here is support for special declarations has been added to both the interpreter and compiler. Local variables which are declared special should now be handled correctly. In 1.01, only variables declared via defvar or defparameter were considered special (plus some built-in variables like *package*). Type Specifiers This area has been improved a lot, with most type expressions supported in most places. I hope to be able to remove the qualifiers so let me know if you notice any problems. Program Structure In 1.01 the defun and defmacro macros did not behave correctly in non top-level contexts. This has been corrected. Predicates Most of the missing predicates have been added. Control Structure It was pointed out to me that the do macro in 1.01 was incorrect. In particular, it did not update the set of local variables 'in parallel' as it was supposed to do. This has been fixed in 1.1. Also, implementations of psetq and all of the multiple value handling macros are included. A number of mapping functions which were missing in 1.01 have been added. Compiler The compiler now correctly compiles flet special forms, structures, and special declarations. labels forms compile, but the generated code is the same as for flet. labels works correctly when interpreted. Some bugs in the interpreter relating to these forms and function closures were identified and fixed. The compiler now behaves in accordance with CLTL2 concerning evaluation of compiled forms. Forms are not evaluated in general, although eval-when can be used to force evaluation at compile time. Compiled libraries now use the extension (by default) .fasl which is commonly used by other Lisp systems. Of course these files are not compatible with other Lisp systems. Compiled libraries are significantly smaller than 1.01 libraries. This is accomplished mostly by eliminating redundancy in the symbol tables. This makes loading faster. Libraries are about 30% smaller, and should still be compatible with 1.01 libraries. That is, 1.01 libraries should still load into 1.1, but 1.1 libraries will not be usable by 1.01. I recommend that you recompile any of your own libraries with version 1.1. This will allow you to benefit from the smaller libraries, faster load time and corrected compiler behavior. The 'missing function' warning messages which so often were emitted by the compiler are now eliminated. My hope is to add a better, more useful warning facility to replace this. In the mean time it was more of a source of confusion and annoyance than a help. At any rate, if a function is missing at run time, you will get an error message (the system won't crash). Declarations As mentioned before, special declarations are now handled correctly by the compiler and interpreter. Most other declarations are currently ignored by both the compiler and interpreter. The locally special form is not yet supported. Packages Some support was added here for shadowing symbols. The defpackage macro was added. The handling of shadowing symbols still may not be exactly correct. Numbers Many number functions have been added, including sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, exp, expt, log, float, isqrt. Large integers and complex numbers are now supported. A few functions are still missing, but all the missing ones will explicitly generate "not implemented" messages rather than the normal "no function definition". Integers between 0 and 500 now are cached i.e. new ones never need to be created. (eq 100 100) is true, but (eq 501 501) is nil. Interpreter The interpreter has been sped up by reducing the number of external memory accesses during the interpretation process. Characters All characters are kept in a table, so never need to be created (as are integers between 0 and 500). This makes some character handling more efficient. Some character-related functions were added. Sequences A number of missing sequence functions are now implemented. Strings A number of string functions which were missing in 1.01 are now implemented. Structures The defstruct macro has been rewritten in Common Lisp, and is included in the library 'structures.lisp'. The structure printing facility should now work correctly. Code which uses structures now compiles correctly. Streams The functions with-output-to-string, read-from-string are now implemented. The standard stream *terminal-io* has been added. Input/Output Much work has been done with the output functions. Many have been reimplemented. All the parameters to write are now supported. Circular lists can be read and written, print-level can be set, etc. Pretty printing is still not supported. The format function works better and more options are supported. I won't enumerate them here, but if you are really curious you could read the source code, which is included in format.lisp in the library folder. Some output functions, in particular print, worked incorrectly in 1.01. These have been fixed, but the fix may cause your code to output differently. Sorry. :-) Errors The warn function has been implemented. Backquotes Guy Steele's backquote handling code, with optimizations (from CLTL2) is now used to handle backquote forms. This correctly handles nested backquote forms, and generates optimally efficient forms. Documentation Updated this README file. I have included a Common Ground version of the documentation which has a built-in viewer. You can use this version to browse and print the documentation if you don't have a copy of Microsoft Word. The PowerLisp user guide has been updated to include the 1.1 modifications. Non-standard Extensions A graphics library has been added. To use it, execute the expression: (require :graphics) This will cause the library to be loaded and you may use it to create graphic images. The following functions get loaded into the COMMON-LISP package: open-canvas use-canvas moveto lineto setcolor pensize fillrect fillpoly clear-canvas These functions contain (brief) usage documentation. PowerLisp 1.01 Updates since version 1.0: Fixed problem which would cause PowerLisp to crash when exiting the program in certain cases. Files selected from the Finder come up on top of the Worksheet rather than underneath it. Fixed (setf third) function definition in cl.lisp (common lisp standard library). Removed MacWrite version of the documentation. I do not have MacWrite to test it, and it reportedly has a problem.